/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package paw.eltabique.web.data;

import paw.eltabique.domain.Usuario;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Hashtable;
import java.util.List;
import paw.eltabique.domain.Usuario.Role;
import paw.eltabique.service.exceptions.UserAlReadyExistException;
import paw.eltabique.service.exceptions.UserNotFoundException;

/**
 *
 * @author drakart
 */
public class UserData {
  private static UserData singleton = null;

  
  private Hashtable<String, Usuario> usuarios;
  
  private UserData(){
      usuarios = new Hashtable<String, Usuario>();
      usuarios.put("admin", new Usuario("admin",Role.ADMINISTRADOR));
      usuarios.put("usuario", new Usuario("usuario",Role.USUARIO));
      usuarios.put("invitado", new Usuario("invitado",Role.INVITADO));
    }

  public static UserData getInstance(){
    if(singleton == null)
      singleton = new UserData();

    return singleton;
  }

  public Usuario getUsuario(String userName) throws UserNotFoundException{
    if (usuarios.get(userName)==null) throw new UserNotFoundException("Este usuario no existe") ;
    return usuarios.get(userName);
  }
  
  public List<Usuario> getNombreUsuarios(){
   ArrayList<Usuario> result = new ArrayList(usuarios.size());
   result.addAll(usuarios.values());
   return result;
  }

  public Collection<Usuario> getUsuarios(){
   return usuarios.values();
  }

  public void addUsuario(Usuario usr) throws UserAlReadyExistException{
    if(usuarios.containsKey(usr.getLogin())){
      throw new UserAlReadyExistException("Este usuario ya existe");
    } else {
      usuarios.put(usr.getLogin(), usr);
    }
  }

  public void removeUsuario(String usrName) throws UserNotFoundException {
    if(usrName.equals("admin")){
      throw new UserNotFoundException("Admin cannot be removed");
    }else if(usuarios.containsKey(usrName)){
      usuarios.remove(usrName);
    } else {
      throw new UserNotFoundException("Este usuario no existe");
    }
  }

  public void updateUsuario(Usuario usr) throws UserNotFoundException {
    if(usr.getLogin().equals("admin")){
      throw new UserNotFoundException("Admin cannot be converted");
    }else if(usuarios.containsKey(usr.getLogin())){
      usuarios.remove(usr.getLogin());
      usuarios.put(usr.getLogin(), usr);
    } else {
      throw new UserNotFoundException("Este usuario no existe");
    }
  }
}
